﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TCC_Hotel.Entidades;
using System.Globalization;
using System.Data.SqlClient;
using System.Configuration;

namespace TCC_Hotel.Repositorio
{
    public class FluxoHospedesRepositorio
    {
        ControleBancoDados controle = new ControleBancoDados();

        /// <summary>
        /// Cria o comando SQL e envia para um método inserir uma novo hospede no hotel
        /// </summary>
        /// <param name="hospedes">Entidade Fluxo_Hospedes</param>
        /// <returns>true se inseriu ou false se não</returns>
        public bool EfetuarCheckIn(Fluxo_Hospedes hospedes, Conta conta)
        {
            //Converte o numero decimal de virgula para ponto
            string preco_Total = hospedes.Preco_Total.ToString(CultureInfo.InvariantCulture);

            //definição do comando sql
            string sql =
                "INSERT INTO Fluxo_Hospedes VALUES (" +
                hospedes.ID + ", " +
                hospedes.Numero_Apartamento + ", '" +
                hospedes.Nome_1 + "', '" +
                hospedes.RG_1 + "', '" +                
                hospedes.Nome_2 + "', '" +
                hospedes.RG_2 + "','" +
                hospedes.Nome_3 + "', '" +
                hospedes.RG_3 + "','" +
                hospedes.Nome_4 + "', '" +
                hospedes.RG_4 + "','" +
                hospedes.Nome_5 + "', '" +
                hospedes.RG_5 + "','" +
                hospedes.Data_Reserva_Entrada + "', '" +
                hospedes.Data_Reserva_Saida + "','" +
                hospedes.Data_Entrada + "', '" +
                hospedes.Data_Saida + "'," +
                preco_Total + ", '" +
                hospedes.NoHotel + "', '" +
                hospedes.Celular + "', '" +
                hospedes.SMSVenda + "', '" +
                hospedes.SMSCheckOut + "') ";

            //coloca a reserva como ja realizou o check-in
            if (hospedes.ID % 2 == 0)
            {
                sql = sql + " UPDATE Reservas_Particular SET " +
                     "NoHotel = '" + true + "' WHERE ID = " + hospedes.ID + " ";
            }
            else
            {
                sql = sql + " UPDATE Reservas_Faturadas SET " +
                  "NoHotel = '" + true + "' WHERE ID = " + hospedes.ID + " ";
            }

            //seta o apartamento como indisponivel
            sql = sql + " UPDATE Apartamentos SET " +
                "Disponibilidade = '" + false + "' WHERE Numero = " + hospedes.Numero_Apartamento + " ";

            //Converte o numero decimal de virgula para ponto
            string preco = conta.Preco.ToString(CultureInfo.InvariantCulture);

            //definição do comando sql para cadastrar uma conta para o hospede
             sql = sql +
                " INSERT INTO Contas VALUES (" +
                conta.ID + ", '" +
                conta.Descricao + "', " +
                preco + ", '" +
                conta.Data + "', '" +
                conta.Pagamento + "', '" +
                false + "')";

             //definição do comando sql para inserir uma receita
             sql = sql +
                " INSERT INTO Balanco_Financeiro VALUES ('" +
                conta.Descricao + " para o apartamento do hóspede " + hospedes.Nome_1 + "', " +
                preco + ", '" +
                conta.Data + "', '" +
                true + "')";


            //Método que escreve o comando sql nos bancos de dados
            return controle.EscreveBancoDados(sql);

        }

        /// <summary>
        /// Cria o comando SQL e envia para um método extender estadia de um hospede
        /// </summary>
        /// <param name="hospedes">Entidade Fluxo_Hospedes</param>
        /// <returns>true se extendeu ou false se não</returns>
        public bool ExtenderEstadia(Fluxo_Hospedes hospedes, Conta conta)
        {
            //definição do comando sql
            string sql =
                "UPDATE Fluxo_Hospedes SET " +
                "Saida = '" + hospedes.Data_Saida + "'," +
                "Reserva_Saida = '" + hospedes.Data_Saida + "'" +
                "WHERE ID = " + hospedes.ID + " ";
            

            //coloca a reserva coma nova data, que a data que ele vai sair menos um dia
            if (hospedes.ID % 2 == 0)
            {
                sql = sql + " UPDATE Reservas_Particular SET " +
                     "Data_Fim = '" + hospedes.Data_Saida.AddDays(-1) + "' WHERE ID = " + hospedes.ID + " ";
            }
            else
            {
                sql = sql + " UPDATE Reservas_Faturadas SET " +
                     "Data_Fim = '" + hospedes.Data_Saida.AddDays(-1) + "' WHERE ID = " + hospedes.ID + " ";
            }

            //Converte o numero decimal de virgula para ponto
            string preco = conta.Preco.ToString(CultureInfo.InvariantCulture);

            //definição do comando sql para cadastrar uma conta para o hospede
            sql = sql +
               " INSERT INTO Contas VALUES (" +
               conta.ID + ", '" +
               conta.Descricao + "', " +
               preco + ", '" +
               conta.Data + "', '" +
               conta.Pagamento + "', '" +
               false + "')";

            //definição do comando sql para inserir uma receita
            sql = sql +
               " INSERT INTO Balanco_Financeiro VALUES ('" +
               conta.Descricao + " para o apartamento do hóspede " + hospedes.Nome_1 + "', " +
               preco + ", '" +
               conta.Data + "', '" +
               true + "')";


            //Método que escreve o comando sql nos bancos de dados
            return controle.EscreveBancoDados(sql);

        }

        /// <summary>
        /// Cria o comando SQL e envia para um método extender estadia de um hospede
        /// </summary>
        /// <param name="hospedes">Entidade Fluxo_Hospedes</param>
        /// <returns>true se extendeu ou false se não</returns>
        public bool ExtenderEstadiaAgenda(Fluxo_Hospedes hospedes, Conta conta)
        {
            //definição do comando sql
            string sql =
                "UPDATE Fluxo_Hospedes SET " +
                "Saida = '" + hospedes.Data_Saida + "'," +
                "Reserva_Saida = '" + hospedes.Data_Saida + "'" +
                "WHERE ID = " + hospedes.ID + " ";


            //coloca a reserva coma nova data, que a data que ele vai sair menos um dia
            if (hospedes.ID % 2 == 0)
            {
                sql = sql + " UPDATE Reservas_Particular SET " +
                     "Data_Fim = '" + hospedes.Data_Saida.AddDays(-1) + "' WHERE ID = " + hospedes.ID + " ";
            }
            else
            {
                sql = sql + " UPDATE Reservas_Faturadas SET " +
                     "Data_Fim = '" + hospedes.Data_Saida.AddDays(-1) + "' WHERE ID = " + hospedes.ID + " ";
            }

            //Converte o numero decimal de virgula para ponto
            string preco = conta.Preco.ToString(CultureInfo.InvariantCulture);

            //definição do comando sql para cadastrar uma conta para o hospede
            sql = sql +
               " INSERT INTO Contas VALUES (" +
               conta.ID + ", '" +
               conta.Descricao + "', " +
               preco + ", '" +
               conta.Data + "', '" +
               conta.Pagamento + "', '" +
               false + "')";

            //Método que escreve o comando sql nos bancos de dados
            return controle.EscreveBancoDados(sql);

        }

        /// <summary>
        /// Cria o comando SQL e envia para um método trocar o SMS 
        /// </summary>
        /// <param name="hospedes">Entidade Fluxo_Hospedes</param>
        /// <returns>true se extendeu ou false se não</returns>
        public bool AlterarCelularSMS(Fluxo_Hospedes hospedes)
        {
            //definição do comando sql
            string sql =
                "UPDATE Fluxo_Hospedes SET " +
                "Celular = '" + hospedes.Celular + "', " +
                "SMSVenda = '" + hospedes.SMSVenda + "', " +
                "SMSCheckOut = '" + hospedes.SMSCheckOut + "' " +
                "WHERE ID = " + hospedes.ID + " ";

            //Método que escreve o comando sql nos bancos de dados
            return controle.EscreveBancoDados(sql);

        }

        /// <summary>
        /// Cria o comando SQL e envia para um método de fazer o checkOut de hospedes do hotel
        /// </summary>
        /// <param name="hospedes">Entidade Fluxo_Hospedes</param>
        /// <returns>true se inseriu ou false se não</returns>
        public bool EfetuarCheckOut(Fluxo_Hospedes hospedes, Balanco_Financeiro balanco)
        {
            //Converte o numero decimal de virgula para ponto
            string preco_Total = hospedes.Preco_Total.ToString(CultureInfo.InvariantCulture);
            
            //definição do comando sql
            string sql =
                "UPDATE Fluxo_Hospedes SET " +
                "Saida = '" + hospedes.Data_Saida + "', " +
                "Preco_Total = " + preco_Total + ", " +
                "NoHotel = '" + hospedes.NoHotel + "' WHERE ID = " + hospedes.ID + "";
            
          
            //coloca a reserva como ja realizou o check-in
            if (hospedes.ID % 2 == 0)
            {              
               sql = sql + " DELETE FROM Reservas_Particular WHERE ID = " + hospedes.ID + " ";
                
            }
            else
            {
               sql = sql + " DELETE FROM Reservas_Faturadas WHERE ID = " + hospedes.ID + " ";                              
            }

            //definição do comando sql para colocar a conta como paga
            sql = sql +
                "UPDATE Contas SET " +
                "Pagamento = '" + true + "' WHERE ID = " + hospedes.ID + "";

            //Converte o numero decimal de virgula para ponto
            string preco = balanco.PrecoGasto.ToString(CultureInfo.InvariantCulture);

           
            //definição do comando sql para inserir uma receita
            sql = sql +
               " INSERT INTO Balanco_Financeiro VALUES ('" +
               balanco.Descricao + "', " +
               preco + ", '" +
               balanco.DataDespesa + "', '" +
               true + "')";
            

            //Método que escreve o comando sql nos bancos de dados
            return controle.EscreveBancoDados(sql);

        }


        /// <summary>
        /// Recupera todas os hospedes presentes no hotel
        /// </summary>       
        /// <returns>lista com os hospedes</returns>
        public List<Fluxo_Hospedes> RecuperarFluxoHospedes()
        {
            List<Fluxo_Hospedes> resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes";

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader);

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();



                    //le os dados retornados e monta objeto reserva
                    resposta = ListarFluxoHospedes(reader);


                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }

        /// <summary>
        /// Recupera todas os hospedes presentes no hotel por apartamento
        /// </summary>       
        /// <returns>lista com os hospedes</returns>
        public Fluxo_Hospedes RecuperarFluxoHospedesPorApartamento(int numero)
        {
            Fluxo_Hospedes resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes Where Apartamento = " + numero + " AND NoHotel = 1";

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader).FirstOrDefault();

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();

                    //le os dados retornados e monta objeto reservas
                    resposta = ListarFluxoHospedes(reader).FirstOrDefault();

                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }


        /// <summary>
        /// Recupera um hospede especifico presente no hotel
        /// </summary>       
        /// <returns>hospede com seus acompanhantes</returns>
        public Fluxo_Hospedes RecuperarDetalhesFluxoHospede(int ID)
        {
            Fluxo_Hospedes resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes WHERE ID =" + ID;

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader).FirstOrDefault();

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();



                    //le os dados retornados e monta objeto reserva
                    resposta = ListarFluxoHospedes(reader).FirstOrDefault();


                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }


        /// <summary>
        /// Recupera todas os hospedes particulares presentes no hotel
        /// </summary>       
        /// <returns>lista com os hospedes</returns>
        public List<Fluxo_Hospedes> RecuperarFluxoHospedesParticulares()
        {
            List<Fluxo_Hospedes> resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes WHERE ID%2 = 0 ";

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader);

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();



                    //le os dados retornados e monta objeto reserva
                    resposta = ListarFluxoHospedes(reader);


                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }

        /// <summary>
        /// Recupera todas os hospedes que estao presentes no hotel neste momento
        /// </summary>       
        /// <returns>lista com os hospedes presentes</returns>
        public List<Fluxo_Hospedes> RecuperarFluxoHospedesAgora()
        {
            List<Fluxo_Hospedes> resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes WHERE NoHotel = 'true' ";

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader);

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();



                    //le os dados retornados e monta objeto reserva
                    resposta = ListarFluxoHospedes(reader);


                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }

        /// <summary>
        /// Recupera todas os hospedes que já estiveram no hotel
        /// </summary>       
        /// <returns>lista com os hospedes</returns>
        public List<Fluxo_Hospedes> RecuperarFluxoHospedesAntigos()
        {
            List<Fluxo_Hospedes> resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes WHERE NoHotel = 'false' ";

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader);

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();



                    //le os dados retornados e monta objeto reserva
                    resposta = ListarFluxoHospedes(reader);


                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }

        /// <summary>
        /// Recupera todas os hospedes Faturados presentes no hotel
        /// </summary>       
        /// <returns>lista com os hospedes</returns>
        public List<Fluxo_Hospedes> RecuperarFluxoHospedesFaturados()
        {
            List<Fluxo_Hospedes> resposta = null;
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader;
            //definição do comando sql
            string sql =
                "SELECT * FROM Fluxo_Hospedes WHERE ID%2 != 0 ";

            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão
            SqlCommand comando = new SqlCommand(sql, con);

            //--------tenta conectar no servidor externo-----------------------
            try
            {

                //abre a conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();

                //executa a query
                reader = comando.ExecuteReader();

                //le os dados retornados e monta objeto reservas
                resposta = ListarFluxoHospedes(reader);

                //fecha a conexao
                con.Close();


            }
            //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    comando.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = comando.ExecuteReader();



                    //le os dados retornados e monta objeto reserva
                    resposta = ListarFluxoHospedes(reader);


                    //fecha a conexao
                    con2.Close();
                }

            }
            finally
            {
                con.Close();
            }

            return resposta;


        }

        /// <summary>
        /// Lê dados da tabela correspondente através de um comando SQL os montando 
        /// a lista que é retornada
        /// </summary>
        /// <param name="reader">SqlDataReader</param>
        /// <returns>Lista de hospede faturado</returns>
        public List<Fluxo_Hospedes> ListarFluxoHospedes(SqlDataReader reader)
        {
            List<Fluxo_Hospedes> listaResposta = new List<Fluxo_Hospedes>();

            //le os dados retornados e monta objeto hóspedes
            while (reader.Read())
            {
                listaResposta.Add(new Fluxo_Hospedes()
                {
                    ID = Convert.ToInt32(reader["ID"]),
                    Numero_Apartamento = Convert.ToInt32(reader["Apartamento"]),
                    Nome_1 = Convert.ToString(reader["Nome_1"]),
                    RG_1 = Convert.ToString(reader["RG_1"]),                    
                    Nome_2 = Convert.ToString(reader["Nome_2"]),
                    RG_2 = Convert.ToString(reader["RG_2"]),
                    Nome_3 = Convert.ToString(reader["Nome_3"]),
                    RG_3 = Convert.ToString(reader["RG_3"]),
                    Nome_4 = Convert.ToString(reader["Nome_4"]),
                    RG_4 = Convert.ToString(reader["RG_4"]),
                    Nome_5 = Convert.ToString(reader["Nome_5"]),
                    RG_5 = Convert.ToString(reader["RG_5"]),
                    Data_Reserva_Entrada = Convert.ToDateTime(reader["Reserva_Entrada"]),
                    Data_Reserva_Saida = Convert.ToDateTime(reader["Reserva_Saida"]),
                    Data_Entrada = Convert.ToDateTime(reader["Entrada"]),
                    Data_Saida = Convert.ToDateTime(reader["Saida"]),
                    Preco_Total = Convert.ToDouble(reader["Preco_Total"]),
                    NoHotel = Convert.ToBoolean(reader["NoHotel"]),
                    Celular = Convert.ToString(reader["Celular"]),
                    SMSVenda = Convert.ToBoolean(reader["SMSVenda"]),
                    SMSCheckOut = Convert.ToBoolean(reader["SMSCheckOut"])
 
                });

            }

            return listaResposta;


        }
    }
}